package com.scut.fy.gateway.auth;

import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Configuration;

/**
 * 网关的[Sa-Token 权限认证] 配置类，实现鉴权接口
 * @author JY
 */
@Configuration
public class SaTokenConfigure {

    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 配置拦截的地址
                .addInclude("/**")
                // 开发的地址
                .addExclude("/favicon.ico")
                .setAuth(r -> {
                    // 登录验证 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
                    SaRouter.match("/**", "/login", () -> StpUtil.checkLogin());
                    // 权限认证 -- 不同模块, 校验不同权限
                    SaRouter.match("/user/**", () -> StpUtil.checkPermission("user"));
                    SaRouter.match("/admin/**", () -> StpUtil.checkPermission("admin"));
                    SaRouter.match("/goods/**", () -> StpUtil.checkPermission("goods"));
                    SaRouter.match("/orders/**", () -> StpUtil.checkPermission("orders"));
                })
                // 异常处理方法：每次setAuth函数出现异常时进入
                .setError(e -> {
                    return SaResult.error(e.getMessage());
                })
                ;
    }
}
